Using Buffers :: 자바네트워크I/O[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

자바네트워크I/O
[1]
등록일:2008-03-12 09:47:24 (0%)
작성자:
제목:Using Buffers
/  :  c12:UsingBuffers.java
//  From  'Thinking  in  Java,  3rd  ed.'  (c)  Bruce  Eckel  2002
//  www.BruceEckel.com.  See  copyright  notice  in  CopyRight.txt.

import  java.nio.ByteBuffer;
import  java.nio.CharBuffer;

public  class  UsingBuffers  {
    private  static  void  symmetricScramble(CharBuffer  buffer)  {
        while  (buffer.hasRemaining())  {
            buffer.mark();
            char  c1  =  buffer.get();
            char  c2  =  buffer.get();
            buffer.reset();
            buffer.put(c2).put(c1);
        }
    }

    public  static  void  main(String[]  args)  {
        char[]  data  =  "UsingBuffers".toCharArray();
        ByteBuffer  bb  =  ByteBuffer.allocate(data.length  *  2);
        CharBuffer  cb  =  bb.asCharBuffer();
        cb.put(data);
        System.out.println(cb.rewind());
        symmetricScramble(cb);
        System.out.println(cb.rewind());
        symmetricScramble(cb);
        System.out.println(cb.rewind());

    }
}  ///:~

---------------------------------------------------------------------------------------------------

1>  Buffer  클래스의  메서드
ㅁ  public  final  int  capacity()  :  이  버퍼의  용량(전체크기)를  리턴한다.
ㅁ  public  final  int  position()  :  이  버퍼의  위치를  리턴.
ㅁ  public  final  Buffer  position(int  newPosition)  :  이  버퍼의  위치를  newPosition으로  설정한다.
ㅁ  public  final  int  limit()  ;  이  버퍼의  limit를  리턴.
ㅁ  public  final  Buffer  limit(int  newLimit)  :  이  버퍼의  limit를  newlimit으로  설정한다.
ㅁ  public  final  Buffer  mark()  :  이  버퍼의  현재  위치에  마크를  설정.
ㅁ  public  final  Buffer  reset()
:  버퍼의  위치를  이전에  마크  한  위치에  되돌린다.  그렇다고  마크의  값이  마크가  파기되거나,  변경되지  않는다.
==>  예외:  InvalidMarkException  -  마크가  설정되어  있지  않은  경우에  reset()메서드를  호출한  경우  발생
ㅁ  public  final  Buffer  clear()
:  이  버퍼의  위치(position)는  0으로  limit와  capacity값과  같게  설정한다.  마크값은  파기된다.  한  번  사용한  버퍼를  새롭게  다시  쓰기  위해  설정한다.  이  메소드는,  read  조작  (put)을  실행하기  전에  주로  호출한다.  단,  버퍼내의  데이터를  지우는  것은  아니다.  단지  position과  limit를  초기값으로  설정한다.
ㅁ  public  final  Buffer  flip()
:  이  버퍼의  위치(position)는  0으로  limit와  position값과  같게  설정한다.  마크값은  파기된다.  이  메서드는  read  조작  (put)뒤,  write()나  get()하기전에  이  메소드를  호출한다.
==>  예   buf.put(magic);  //  Prepend  header
in.read(buf);  //  Read  data  into  rest  of  buffer
buf.flip();  //  Flip  buffer
out.write(buf);  //  Write  header  +  data  to  channel
ㅁ  public  final  Buffer  rewind()
:  이  버퍼의  위치만  0  으로  설정되어  마크는  파기된다.  이는  이미  put한  것을  다시  get할때나  이미  put한  것을  취소할때  사용한다.
ㅁ  public  final  int  remaining()
:  현재  위치에서  limit까지  읽어들일  수  있는  데이터의  개수를  리턴한다.
ㅁ  public  final  boolean  hasRemaining()
:  현재  위치에서  limit까지  하나  이상의  차이가  나는지를  boolean형으로  리턴해  준다.  하나  이상의  차이가  나면  하나  이상의  데이터를  get()하거나  put()할  수  있기  때문에  BufferOverflowException  이나  BufferUnderflowException  을  피하기  위한  목적으로  사용된다.  이  버퍼내에  요소가  1  개  이상  존재하는  경우  true를  리턴.
ㅁ  public  abstract  boolean  isReadOnly()
:  현재  이  버퍼가  get()만  가능하며  put()은  금지되어있는지  알려준다.
[본문링크] Using Buffers
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=2516
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.